package main

import "fmt"

func main() {
	//传统的定义函数调用
	fmt.Println(alarm("邮件", "严重"))
	fmt.Println(alarm("邮件", "紧急"))
	fmt.Println(alarm("邮件", "普通"))
	fmt.Println(alarm("微信", "严重"))
	fmt.Println(alarm("微信", "紧急"))
	fmt.Println(alarm("微信", "普通"))

	println("------------")

	//使用闭包函数调用
	email := myAlarm("邮件")
	fmt.Println(email("严重"))
	fmt.Println(email("紧急"))
	fmt.Println(email("普通"))
	weixin := myAlarm("微信")
	fmt.Println(weixin("严重"))
	fmt.Println(weixin("紧急"))
	fmt.Println(weixin("普通"))
}

/*
假设要实现一个监控告警的例子：根据不同的告警规则，触发不同渠道的不同紧急程度的告警。
告警支持多种通知渠道，包括：邮件、微信、语音电话。
通知的紧急程度有多种类型，包括：严重、紧急、普通。
*/
func alarm(messageType string, messageDegree string) string {
	return fmt.Sprintf("消息类型:%v, 重要程度:%v", messageType, messageDegree)
}

func myAlarm(messageType string) func(string) string {
	return func(messageDegree string) string {
		return alarm(messageType, messageDegree)
	}
}
